SpringMVC源码分析:SpringMVC九大组件分析(三)

您所在的位置:网站首页 springmvc 尚硅谷 笔记 SpringMVC源码分析:SpringMVC九大组件分析(三)

SpringMVC源码分析:SpringMVC九大组件分析(三)

2023-06-03 09:25| 来源: 网络整理| 查看: 265

一、概述

SpringMVC九大组件如下图,我将一个个进行介绍。各个组件使用的入口DispatcherServlet.doDispatch是各个组件使用的入口,我们大部分代码都是从这里开始进入的。

 二、MultipartResolver

下面是MultipartResolver组件具体的使用流程,我们将一一介绍。

 DispatcherServlet.checkMultipart是文件上传的入口。

 点开该解析方法,会进入接口,但是我要看具体方法需要看实现的子类,那么要去看哪个子类呢?这时候注释的重要性就体现出来了。

 注释里面明确给我们指示了这两个类是重要的实现子类,我们选择最上面的类进行具体的分析。

 进入该类后parseRequest便是核心的处理方法。

 ServletFileUpload.parseRequest方法,之后进入FileUploadBase.parseRequest具体解析了参数,并返回了结果。

 CommonsFileUploadSupport.parseFileItems方法具体处理了结果并进行返回。

  三、HandlerMapping

HandlerMapping使用的方法流程图如下图。它的大致处理逻辑是在Spring初始化的时候把处理器都放入DispatcherServlet.handlerMappings中,之后再遍历获取处理器。

 

 通过DispatcherServlet.getHandler方法进入AbstractHandlerMapping.getHandler方法。

 最后通过getHandlerInternal方法到具体的实现类中查看。

 AbstractHandlerMethodMapping.getHandlerInternal调用的lookupHandlerMethod是具体的处理方法。

 lookupHandlerMethod方法会根据初始化时存储的的路径去匹配对应的处理器。

具体的注册路径的方法来自于AbstractHandlerMethodMapping的内部类MappingRegistry的register方法。

 四、HandlerAdapter

HandlerAdapter具体的请求处理流程如下,HandlerAdapter是具体处理的类,十分重要。

 

 通过mv = ha.handle(processedRequest, response, mappedHandler.getHandler())这段代码,进入到AbstractHandlerMethodAdapter.handle方法。

 最后进入RequestMappingHandlerAdapter.handleInternal进行具体处理。

 invokeHandlerMethod方法进行了具体处理。

最后进入ServletInvocableHandlerMethod.invokeAndHandle方法。

 最后进入InvocableHandlerMethod.invokeForRequest方法完成了最终方法的调用。

  五、ViewResolver

ViewResolver的处理流程如下图。

 先进入processDispatchResult方法

 再通过render进行具体处理。

  六、HandlerExceptionResolver

 

 

 通过processDispatchResult方法进入processHandlerException进行异常的具体处理。

 该方法进入具体的异常解析类进行异常处理。

  七、ThemeResolver,LocaleResolver,RequestToViewNameTranslator,FlashMapManager

ThemeResolver,LocaleResolver,RequestToViewNameTranslator,FlashMapManager这四个组件再整个过程中,不起主要作用,因此不做重点介绍,大家可以自行学习。

  八、总处理流程

 

参考文章:

【Spring】MVC:HandlerMapping 初始化及 handler 获取_槑!的博客-CSDN博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3